package com.xiaoc.bulldozer.common.dao;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.xiaoc.bulldozer.common.dto.AwardDto;
import com.xiaoc.bulldozer.common.dto.AwardQueryDto;
import com.xiaoc.bulldozer.common.model.Award;

/**
 * Award Mapper 接口
 *
 * @author Danfo Yam
 * @date 2018-08-24 15:47:58
 */
public interface AwardMapper {

    /**
     * 根据条件查询Award数量
     *
     * @param AwardQueryDto
     * @return 满足查询条件的记录数量
     */
    public Integer getAwardCountByCondition(AwardQueryDto awardQueryDto);

    /**
     * 根据条件分页查询Award列表
     *
     * @param AwardQueryDto
     * @return 满足查询条件的Award列表
     */
    public List<Award> getAwardListByCondition(AwardQueryDto awardQueryDto);

    /**
     * 根据Id获取Award
     *
     * @param id
     * @return Award对象
     */
    public Award getAwardById(Integer id);

    /**
     * 获取所有Award列表
     *
     * @return Award列表
     */
    public List<Award> getAllAwardList();

    /**
     * 新增Award
     *
     * @param award
     * @return void
     */
    public void save(Award award);

    /**
     * 更新Award
     *
     * @param award
     * @return void
     */
    public void update(Award award);

    /**
     * 根据Id删除Award
     *
     * @param id
     * @return void
     */
    public void deleteById(Integer id);


    /**
     * 根据userId和 status获取Award
     *
     * @param userId
     * @param status
     * @return
     */
    public Award getAwardByUserIdAndStatus(@Param("userId") Integer userId, @Param("status") Integer status);


    /**
     * 根据userId获取最大轮次
     *
     * @param userId
     * @return 最大轮次值
     */
    public int getMaxRoundCountByUserId(Integer userId);

    /**
     * 根据userId和轮次获取Award列表
     *
     * @param userId
     * @param roundCount
     * @return Award 集合
     */
    public List<Award> getAwardByUserIdAndRoundCount(@Param("userId") Integer userId, @Param("roundCount") Integer roundCount);

    /**
     * 根据id和userId获取红包
     *
     * @param id
     * @param userId
     * @return
     */
    public Award getAwardByIdAndUserId(@Param("id") Integer id, @Param("userId") Integer userId);

    /**
     * 获取最近获奖名单
     */
    public List<AwardDto> getRecentAwardList(Integer limit);


    /**
     * 根据userId获取最新一次红包记录
     *
     * @param userId
     * @return
     */
    public Award getRecentAwardByUserId(Integer userId);

    /**
     * 根据status获取Award列表
     *
     * @param status
     * @return
     */
    public List<Award> getAwardListByStatus(Integer status);


    /**
     * 更改状态
     *
     * @param status
     * @param awardIds
     */
    public void updateStatusByIds(@Param("status") Integer status, @Param("awardIds") Set<Integer> awardIds);


    /**
     * 通过userId roundCount 获取成获得红包次数
     *
     * @param userId
     * @param roundCount
     * @param status
     * @return
     */
    public int getAwardSuccessCountByUserIdAndRoundCount(@Param("userId") Integer userId, @Param("roundCount") Integer roundCount, @Param("status") Integer status);


    /**
     * 通过id,status 获取红包集合
     * @param id
     * @param status
     * @return
     */
    public List<AwardDto> getAwardListByIdAndStatus(@Param("id") Integer id, @Param("status") Integer status);

    /**
     * 获取当前轮的总金额
     * @param roundCount
     * @return
     */
    public Integer currentRoundAmount(@Param("userId") Integer userId, @Param("roundCount") Integer roundCount);

}
